'''
    作者：刘妍
    版本：4.0
    日期：11/05/2020
    1.0功能：模拟投掷骰子
    2.0新增功能：模拟投掷2个骰子
    3.0新增功能：可视化显示投掷2个骰子的结果
    4.0新增功能：用直方图可视化显示投掷2个骰子的结果

    需求分析：骰子是一个六面体，每个面上有一个对应的数字
    投掷骰子，实际上就是一个随机事件，1-6这6个数字随机出现
    每一面出现的概率就是用每面出现的次数/投掷的总次数
    问题：总次数越大，是不是越趋于等概率？
    2个骰子，点数应该在2-12这个范围内
'''

# 导入random模块 模拟随机事件，产生随机数
import random
# 导入可视化数据模块
import matplotlib.pylab as plt

# 解决中文显示问题
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

# 自定义函数，模拟投掷骰子
def roll_dice():
    roll = random.randint(1, 6)
    return roll

def main():
    # 投掷总次数
    total_time = 10000
    # 初始化每个点数对应的投掷次数列表
    result_list = [0] * 11
    # 初始化点数列表
    roll_list = list(range(2, 13))
    # 将点数列表和次数列表用zip函数打包成一个字典
    # key对应点数列表，value对应次数列表
    roll_dict = dict(zip(roll_list, result_list))
    # 记录骰子的投掷结果
    roll_list = []

    # 模拟投掷过程
    for i in range(total_time):
        roll1 = roll_dice()
        roll2 = roll_dice()

        roll_list.append(roll1 + roll2)

    # 直方图数据可视化
    plt.hist(roll_list, bins=range(2, 13), edgecolor='black',
             linewidth=1)
    plt.title('骰子点数统计直方图')
    plt.xlabel('点数')
    plt.ylabel('频率')
    plt.show()


if __name__ == '__main__':
    main()